Learn R Programming

pomp (version 1.10)

Probes and synthetic likelihood: Probe a partially-observed Markov process by computing summary statistics and the synthetic likelihood.

Description

probe applies one or more “probes” to time series data and model simulations and compares the results. It can be used to diagnose goodness of fit and/or as the basis for “probe-matching”, a generalized method-of-moments approach to parameter estimation. probe.match calls an optimizer to adjust model parameters to do probe-matching, i.e., to minimize the discrepancy between simulated and actual data. This discrepancy is measured using the “synthetic likelihood” as defined by Wood (2010). probe.match.objfun constructs an objective function for probe-matching suitable for use in optim-like optimizers.

Usage

"probe"(object, probes, params, nsim, seed = NULL, ...) "probe"(object, probes, params, nsim, seed, ...) "probe.match.objfun"(object, params, est, probes, nsim, seed = NULL, fail.value = NA, transform = FALSE, ...) "probe.match.objfun"(object, probes, nsim, seed, ...) "probe.match"(object, start, est = character(0), probes, nsim, seed = NULL, method = c("subplex","Nelder-Mead","SANN","BFGS", "sannbox","nloptr"), verbose = getOption("verbose"), fail.value = NA, transform = FALSE, ...) "probe.match"(object, probes, nsim, seed, ..., verbose = getOption("verbose")) "probe.match"(object, est, probes, nsim, seed, transform, fail.value, ..., verbose = getOption("verbose")) "logLik"(object, ...) "values"(object, ...)

Arguments

object
An object of class pomp.
probes
A single probe or a list of one or more probes. A probe is simply a scalar- or vector-valued function of one argument that can be applied to the data array of a pomp. A vector-valued probe must always return a vector of the same size. A number of useful examples are provided with the package: see probe functions).
params
optional named numeric vector of model parameters. By default, params=coef(object).
nsim
The number of model simulations to be computed.
seed
optional; if non-NULL, the random number generator will be initialized with this seed for simulations. See simulate-pomp.
start
named numeric vector; the initial guess of parameters.
est
character vector; the names of parameters to be estimated.
method
Optimization method. Choices refer to algorithms used in optim, subplex, and nloptr.
verbose
logical; print diagnostic messages?
fail.value
optional numeric scalar; if non-NA, this value is substituted for non-finite values of the objective function. It should be a large number (i.e., bigger than any legitimate values the objective function is likely to take).
transform
logical; if TRUE, optimization is performed on the transformed scale.
...
Additional arguments. In the case of probe, these are currently ignored. In the case of probe.match, these are passed to the optimizer (one of optim, subplex, nloptr, or sannbox). These are passed via the optimizer's control list (in the case of optim, subplex, and sannbox) or the opts list (in the case of nloptr).

Value

probe returns an object of class probed.pomp. probed.pomp is derived from the pomp class and therefore have all the slots of pomp. In addition, a probed.pomp class has the following slots:
probe.match returns an object of class probe.matched.pomp, which is derived from class probed.pomp. probe.matched.pomp objects therefore have all the slots above plus the following:
probe.match.objfun returns a function suitable for use as an objective function in an optim-like optimizer.

Methods

In addition, slots of this object can be accessed via the $ operator.

Details

A call to probe results in the evaluation of the probe(s) in probes on the data. Additionally, nsim simulated data sets are generated (via a call to simulate) and the probe(s) are applied to each of these. The results of the probe computations on real and simulated data are stored in an object of class probed.pomp.

A call to probe.match results in an attempt to optimize the agreement between model and data, as measured by the specified probes, over the parameters named in est. The results, including coefficients of the fitted model and values of the probes for data and fitted-model simulations, are stored in an object of class probe.matched.pomp.

The objective function minimized by probe.match --- in a form suitable for use with optim-like optimizers --- is created by a call to probe.match.objfun. Specifically, probe.match.objfun will return a function that takes a single numeric-vector argument that is assumed to cotain the parameters named in est, in that order. This function will return the negative synthetic log likelihood for the probes specified.

References

B. E. Kendall, C. J. Briggs, W. M. Murdoch, P. Turchin, S. P. Ellner, E. McCauley, R. M. Nisbet, S. N. Wood Why do populations cycle? A synthesis of statistical and mechanistic modeling approaches, Ecology, 80:1789--1805, 1999.

S. N. Wood Statistical inference for noisy nonlinear ecological dynamic systems, Nature, 466: 1102--1104, 2010.

See Also

pomp, probe functions, spect, and the tutorials on the package website.

Examples

Run this code
pompExample(ou2)
good <- probe(
              ou2,
              probes=list(
                y1.mean=probe.mean(var="y1"),
                y2.mean=probe.mean(var="y2"),
                y1.sd=probe.sd(var="y1"),
                y2.sd=probe.sd(var="y2"),
                extra=function(x)max(x["y1",])
                ),
              nsim=500
              )
summary(good)
plot(good)

bad <- probe(
             ou2,
             params=c(alpha.1=0.1,alpha.4=0.2,x1.0=0,x2.0=0,
                      alpha.2=-0.5,alpha.3=0.3,
                      sigma.1=3,sigma.2=-0.5,sigma.3=2,
                      tau=1),
             probes=list(
               y1.mean=probe.mean(var="y1"),
               y2.mean=probe.mean(var="y2"),
               y1.sd=probe.sd(var="y1"),
               y2.sd=probe.sd(var="y2"),
               extra=function(x)range(x["y1",])
               ),
             nsim=500
             )
summary(bad)
plot(bad)

Run the code above in your browser using DataLab